#include "BrincoConfiguration.h"
#include <string.h>

BrincoConfiguration::BrincoConfiguration() : GameConfiguration()
{
	m_SorteoBrincoConf = NULL;
}

BrincoConfiguration::~BrincoConfiguration()
{
	if ( m_SorteoBrincoConf )
		delete m_SorteoBrincoConf;
}


void BrincoConfiguration::deserialize( QByteArray paqueteBRINCO )
{
	// RMUEVO DATOS DEMAS, esto debe hacerlo el modulo de comunicaciones
	paqueteBRINCO.remove(0,6);
	paqueteBRINCO.remove( paqueteBRINCO.size() - 3 , 3 );

	BMMemoryUtils memoUtils;
	int contadorDatos = 0;

	char * bufferConfiguration = (char*) malloc( paqueteBRINCO.size() + 1 );
	memset( bufferConfiguration , '\0' , paqueteBRINCO.size() + 1 );
	
	for ( int i = 0 ; i < paqueteBRINCO.size() ; i++ )
		bufferConfiguration[i] = paqueteBRINCO.at(i);

	memoUtils.MemoryCopy( &m_IdMsg , bufferConfiguration , sizeof(m_IdMsg) );
	contadorDatos += sizeof(m_IdMsg);

	memoUtils.MemoryCopy( &m_Transaccion , bufferConfiguration + contadorDatos, sizeof(m_Transaccion) );
	contadorDatos += sizeof(m_Transaccion);

// 1 y 2

	memoUtils.MemoryCopy( &m_ErrorCode , bufferConfiguration + contadorDatos, sizeof(m_ErrorCode) );
	contadorDatos += sizeof(m_ErrorCode);

	if ( m_ErrorCode == 0 )
	{
	// 3 al 20

		memset( m_IdTransaccion , '\0' , sizeof(m_IdTransaccion) );
		memoUtils.MemoryCopy( m_IdTransaccion , bufferConfiguration + contadorDatos , SIZE_ID_TRANSACTION , BIG_ENDIAN);
		contadorDatos += SIZE_ID_TRANSACTION;

	// 21

		memoUtils.MemoryCopy( &m_dia, bufferConfiguration + contadorDatos, sizeof(m_dia) );
		contadorDatos += sizeof(m_dia);

	// 22
	
		memoUtils.MemoryCopy( &m_mes, bufferConfiguration + contadorDatos, sizeof(m_mes) );
		contadorDatos += sizeof(m_mes);

	// 23 y 24
	
		memoUtils.MemoryCopy( &m_anio , bufferConfiguration + contadorDatos , sizeof(m_anio) );
		contadorDatos += sizeof(m_anio);

	// 25
	
		memoUtils.MemoryCopy( &m_hora , bufferConfiguration + contadorDatos , sizeof(m_hora) );
		contadorDatos += sizeof(m_hora);

	// 26
	
		memoUtils.MemoryCopy( &m_minutos , bufferConfiguration + contadorDatos , sizeof(m_minutos) );
		contadorDatos += sizeof(m_minutos);

	// 27
	
		memoUtils.MemoryCopy( &m_segundos , bufferConfiguration + contadorDatos , sizeof(m_segundos) );
		contadorDatos+=sizeof(m_segundos);

		// copio los datos restantes para que los deserialice SorteoLotoConfiguration
		QByteArray dataSorteoBrinco = "";
		for ( int j = contadorDatos ; j < paqueteBRINCO.size() ; j++ )
			dataSorteoBrinco.append( paqueteBRINCO.at(j) );

		m_SorteoBrincoConf = new SorteoBrincoConfiguracion();
		m_SorteoBrincoConf->deserialize( dataSorteoBrinco );
		m_SorteoBrincoConf->save();
	}
	else
	{
		// obtengo decripcion del error
		char descripcion[512];
		memset( descripcion , '\0' , 512 );
		memoUtils.MemoryCopy( descripcion , bufferConfiguration + contadorDatos , paqueteBRINCO.size() - contadorDatos , BIG_ENDIAN );
		contadorDatos += paqueteBRINCO.size() - contadorDatos;
		m_ErrorDescription = descripcion;
	}

	free( bufferConfiguration );
}

void BrincoConfiguration::save()
{
	
}

void BrincoConfiguration::update( QByteArray data )
{

}
